package eco2automotive.tasks;
import java.util.*;
import eco2automotive.port.ConnectionControl;
import eco2automotive.util.Clock;
import eco2automotive.data.HashParameters;
import eco2automotive.data.Parameter;
import eco2automotive.gui.Layout_MONITORING;

public class Thread_MONITOR extends Thread{
    ConnectionControl connControl;
    Layout_MONITORING LAYOUT;
    private boolean continuar = true; 
    HashParameters h;       
    Clock wait;
    
  public Thread_MONITOR(ConnectionControl connControl, Layout_MONITORING LAYOUT, HashParameters h)
    {
       this.h=h;
        this.connControl=connControl; 
        this.LAYOUT=LAYOUT;
        
    }
    
       public void detenElHilo()
        {
              continuar=false;
              wait.stopTimer();
         }
         public void run()
   {           
       // mientras continuar ...     
       Iterator it = h.getHash().entrySet().iterator();
       wait=new Clock(3);//A los 3 seg. pausa" el envio 1 SEG.
      while (continuar)
      {
        // System.out.println("Estoy en Mediciones ENVIO UNA TRAMA PRUEBA");
         //this.LAYOUT.updateData("413BAA1FAA1F");          
        if (connControl.DATA_AVAILABLE()==false&&wait.getFlag()==true)
        {
            System.out.println("ENVIO DATOS pues NO HAY datos");            
//--------------- EMVIAR 1 A 1 LOS DATOS con una separación de 1 segundo                                        
            
            if (it.hasNext()) {                 
                                    Map.Entry e = (Map.Entry)it.next();
                                    Parameter p = (Parameter)e.getValue();
                                    
//EVITAR MODO 03 y 04
                if((p.getOperationMode().contains("03")!=true))
                        if((p.getOperationMode().contains("04")!=true))                                                    
                        {                    
                             System.out.println("Enviado... "+p.getOperationMode()+p.getPidKey());
                               connControl.TXData(p.getOperationMode()+p.getPidKey());                                                  
                               try{Thread.sleep(200);}catch(Exception ex){}//TIEMPO ENTRE INSTRUCCION 200ms según doc.
                               
                               this.LAYOUT.updatePrgogress(p.getOperationMode()+p.getPidKey());
                        }
                else{//esto se puede eliminar
                    System.out.println("Mode:"+p.getOperationMode());
                    System.out.println("PID:"+p.getPidKey());
                    System.out.println("--------------------------------------------------NO LO ENVIO ENVIO<<<");
                        }                                                        
                        }
            else{it = h.getHash().entrySet().iterator();}//reestablezco el iterador
            
        }        
        else if(connControl.DATA_AVAILABLE()==true){
        String data;        
        System.out.println("Recojo datos...SI HAY ");                 
        System.out.println("Longitud de la FIFO "+connControl.getFata().getLongitud());        
        
        for(int i=0;i<=connControl.getFata().getLongitud();i++){//bUFFER OF DATA 
            
            System.out.println("LOS MANDO AL LAYOUT >>> "+i);                                                
            //------------------------------        ---------------------------------                                                          
            String str= new String(connControl.getFata().extract().toString());            
             this.LAYOUT.updateData(str);                                    
        }
        this.connControl.downFlag();//ya tengo los datos                
        
        }
   
      }
      
   } 
         
}
